#!/usr/bin/node






const readline = require('readline');
var traverseAll = require('./traverseAll');
var divide = require('./divide');
var dp = require('./dp');



const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
})

arr=[2,4,-7,5,2,-1,2,-4,3];
process.stdout.write("你选择输入数组还是自动生成数组，1 为输入 ， 2为自动生成 \n");
rl.question("输入：",function (y) {
    console.log("你输入的是"+y);
    if (y==1){
        rl.question("输入数组,如（1,6,-5）：",function (arrstr) {
            arr = arrstr.split(',');
            var len = arr.length;
            for(var i=0;i<len;i++){
                arr[i] = parseInt(arr[i]);
            }
            console.log("你输入的数组是");
            console.log(arr);
            process.stdout.write("我做了三种模式，1为暴力遍历，2为分治法，3为动态规划\n");
            rl.question('输入你要的模式（1或者2或者3）',function (index) {
                console.log('你输入的模式：'+ index);
                run(index);
                rl.close();
            })
        })
    }else{
        //自动生成数组
        rl.question('输入你要的数组长度',function (len) {
            console.log('你输入的长度：'+ len);
            len = parseInt(len);
            arr=[];
            for(var i=0;i<len;i++){
                arr.push(randomNum(-10000,10000));
            }
            console.log('生成的数组为：');
            console.log(""+arr);
            process.stdout.write("我做了三种模式，1为暴力遍历，2为分治法，3为动态规划\n");
            rl.question('输入你要的模式（1或者2或者3）',function (index) {
                console.log('你输入的模式：'+ index);
                run(index);
                rl.close();
            })

        })
    }



})





function run(index) {


    var t1 = new Date();
    var res;

    switch (index){
        case "1":
            console.log("run traverseAll");
            res=traverseAll.traverseAll(arr);
            break;
        case "2":
            console.log("run divide");
            res=divide.divide(arr,0,arr.length-1);
            break;
        case "3":
            console.log("run DP");
            res=dp.DP(arr);
            break;
        default:
            console.log("run DP");
            res=dp.DP(arr);
    }


    console.log(res);

    var t2 = new Date();
    console.log(t2.getMilliseconds()-t1.getMilliseconds());


}

//生成从minNum到maxNum的随机数
function randomNum(minNum,maxNum){
    switch(arguments.length){
        case 1:
            return parseInt(Math.random()*minNum+1,10);
            break;
        case 2:
            return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
            break;
        default:
            return 0;
            break;
    }
}




